import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios";

// 定义接口返回的数据类型
interface ResponseData<T> {
  code: number;
  data: T; // 这里直接使用泛型 T
  message: string;
}

// 创建axios实例
const instance: AxiosInstance = axios.create({
  baseURL: "/apis", // 确保这里使用了正确的 API 路径
  timeout: 1000 * 30, // 请求超时时间
});

// 请求拦截器
instance.interceptors.request.use(
  //@ts-ignore
  (config: AxiosRequestConfig) => {
    // 在发送请求之前做些什么
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  //@ts-ignore
  (response: AxiosResponse<ResponseData<any>>) => {
    // 对响应数据做点什么
    return response.data;
  },
  (error) => {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

// public get<ResData = any>(
//   url: string,
//   config?: AxiosRequestConfig
// ): Promise<SuccessResponse<ResData>> {
//   return this.instance
//     .get<SuccessResponse<ResData>>(url, config)
//     .then(({ data }) => data)
//     .catch((err) => err);
// }
// 封装get请求
export const get = <T>(url: string, params?: any): Promise<T> => {
  return instance
    .get<ResponseData<T>>(url, { params })
    .then((response) => response.data) // 只返回 data 属性
    .catch((error) => {
      throw error;
    });
};

// 封装post请求
export const post = <T = any>(url: string, data?: any): Promise<T> => {
  return instance
    .post<ResponseData<T>>(url, data)
    .then((response) => response.data.data) // 只返回 data 属性
    .catch((error) => {
      throw error;
    });
};

// 封装put请求
export const put = <T = any>(url: string, data?: any): Promise<T> => {
  return instance
    .put<ResponseData<T>>(url, data)
    .then((response) => response.data.data) // 只返回 data 属性
    .catch((error) => {
      throw error;
    });
};

// 封装delete请求
export const del = <T = any>(url: string, params?: any): Promise<T> => {
  return instance
    .delete<ResponseData<T>>(url, { params })
    .then((response) => response.data.data) // 只返回 data 属性
    .catch((error) => {
      throw error;
    });
};

// 导出axios实例
export default instance;
